From 10abf5a06abce17347cff508a95d1d6aadac9182 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Fri, 4 Nov 2005 11:46:10 +0100 Subject: [PATCH] Specifying 'mem=' as Linux boot parameter disables the default 8MB slack in the mem_map and the p2m table. Signed-off-by: Keir Fraser --- .../arch/xen/i386/kernel/setup.c | 14 ++++++++----- .../arch/xen/x86_64/kernel/e820.c | 20 +++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c b/linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c index 958e2af479..fe63fe9846 100644 --- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c +++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c @@ -936,11 +936,15 @@ void __init find_max_pfn(void) /* We don't use the fake e820 because we need to respond to user override. */ void __init find_max_pfn(void) { - if ( xen_override_max_pfn < xen_start_info->nr_pages ) - xen_override_max_pfn = xen_start_info->nr_pages; - max_pfn = xen_override_max_pfn; - /* 8MB slack, to make up for address space allocations in backends. */ - max_pfn += 8 << (20 - PAGE_SHIFT); + if (xen_override_max_pfn == 0) { + max_pfn = xen_start_info->nr_pages; + /* Default 8MB slack (to balance backend allocations). */ + max_pfn += 8 << (20 - PAGE_SHIFT); + } else if (xen_override_max_pfn > xen_start_info->nr_pages) { + max_pfn = xen_override_max_pfn; + } else { + max_pfn = xen_start_info->nr_pages; + } } #endif /* XEN */ diff --git a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/e820.c b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/e820.c index c4f0999d32..8aff532d39 100644 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/e820.c +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/e820.c @@ -526,15 +526,19 @@ extern union xen_start_info_union xen_start_info_union; unsigned long __init e820_end_of_ram(void) { - unsigned long max_end_pfn = xen_start_info->nr_pages; - - if ( xen_override_max_pfn < max_end_pfn) - xen_override_max_pfn = max_end_pfn; - - /* 8MB slack, to make up for address space allocations in backends. */ - xen_override_max_pfn += 8 << (20 - PAGE_SHIFT); + unsigned long max_end_pfn; + + if (xen_override_max_pfn == 0) { + max_end_pfn = xen_start_info->nr_pages; + /* Default 8MB slack (to balance backend allocations). */ + max_end_pfn += 8 << (20 - PAGE_SHIFT); + } else if (xen_override_max_pfn > xen_start_info->nr_pages) { + max_end_pfn = xen_override_max_pfn; + } else { + max_end_pfn = xen_start_info->nr_pages; + } - return xen_override_max_pfn; + return max_end_pfn; } void __init e820_reserve_resources(void) -- 2.30.2